package model;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;

import model.definition.DefinitionTexasHoldem;

public class Table implements DefinitionTexasHoldem {

	/** Nombre de joueurs à la table */
	private int tailleTable = 9;
	
	/** Nom de la table */
	private String nomTable = null;

	/** Type de jeu (Cash Game ou Tournois) */
	private int type = CASH_GAME;
	
	/** Hôte de la partie */
	private Joueur host = null;
	
	/** Paquet de cartes */
	private Paquet paquetCartes = new Paquet();
	
	/** Phase de jeu */
	private int phase = PREFLOP;
	
	/** Position des joueurs (suivant la position de leur id dans le tableau)
	 *  et places libres */ 
	private ArrayList<Integer> positionJoueurs =  new ArrayList<Integer>(tailleTable);
	
	/** Etat des tirages joueurs */ 
	private ArrayList<Integer> etatTirages =  new ArrayList<Integer>(tailleTable);
	
	/** Liste des joueurs - id -> Joueur */
	Map<Integer,Joueur> listeJoueurs = new HashMap<Integer,Joueur>();
	
	/** Tableau des actions */
	private ArrayList<Integer> actionsJoueurs =  new ArrayList<Integer>(tailleTable);
	
	/** Tableau des mises */
	private ArrayList<Integer> misesJoueurs =  new ArrayList<Integer>(tailleTable);
	
	public Table(String nomTable, int type) {
		super();
		this.nomTable = nomTable;
		this.type = type;
	}
	
	/** Tirage pour un joueur (2 cartes) */
	public LinkedList<Carte> tirageJoueur (int id) {

		LinkedList<Carte> tirage = new LinkedList<Carte>();
		tirage.push(paquetCartes.tirageUneCarte());
		tirage.push(paquetCartes.tirageUneCarte());
		etatTirages.add(positionJoueurs.indexOf(new Integer(id)), CARTESDISTRIB);
		
		return tirage;
	}
	
	/** Vérifie si les joueurs précédents ont tiré leurs cartes */
	public boolean verifPossibleTirage(int id) {
		
		for(int i = 1; i < positionJoueurs.indexOf(new Integer(id)); i++) {
			if ((etatTirages.get(i)).intValue() == CARTESNONDISTRIB) return false;
		}
		return true;
	}
	
	
	
	public void changementPhase () {
		
		switch (phase)
	     {
	       case PREFLOP:
	    	 /*action*/;
	         break;
	         
	       case FLOP: 
	         /*action*/;
	         break;
	         
	       case TURN:
	         /*action*/;
	         break; 
	         
	       case RIVER:
		         /*action*/;
		         break;
	 
	        default:/*action*/;             
	     }
	}
	
}
